/**
 * 
 */
package fb.chatter.utils;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author hoannguyen
 * 
 */
public final class StringUtils {

	private static Map<String, String> buildVietnameseWovelsMap() {

		Map<String, String> map = new HashMap<String, String>();

		map.put("đ", "d");
		
		map.put("á", "a");
		map.put("à", "a");
		map.put("ả", "a");
		map.put("ã", "a");
		map.put("ạ", "a");

		map.put("ă", "a");
		map.put("ắ", "a");
		map.put("ằ", "a");
		map.put("ẳ", "a");
		map.put("ẵ", "a");
		map.put("ặ", "a");

		map.put("â", "a");
		map.put("ấ", "a");
		map.put("ầ", "a");
		map.put("ẩ", "a");
		map.put("ẫ", "a");
		map.put("ậ", "a");

		map.put("é", "e");
		map.put("è", "e");
		map.put("ẻ", "e");
		map.put("ẽ", "e");
		map.put("ẹ", "e");

		map.put("ê", "e");
		map.put("ế", "e");
		map.put("ề", "e");
		map.put("ể", "e");
		map.put("ễ", "e");
		map.put("ệ", "e");

		map.put("í", "i");
		map.put("ì", "i");
		map.put("ỉ", "i");
		map.put("ĩ", "i");
		map.put("ị", "i");

		map.put("ó", "o");
		map.put("ò", "o");
		map.put("ỏ", "o");
		map.put("õ", "o");
		map.put("ọ", "o");

		map.put("ô", "o");
		map.put("ố", "o");
		map.put("ồ", "o");
		map.put("ổ", "o");
		map.put("õ", "o");
		map.put("ộ", "o");

		map.put("ơ", "o");
		map.put("ớ", "o");
		map.put("ờ", "o");
		map.put("ở", "o");
		map.put("ỡ", "o");
		map.put("ợ", "o");

		map.put("ú", "u");
		map.put("ù", "u");
		map.put("ủ", "u");
		map.put("ũ", "u");
		map.put("ụ", "u");

		map.put("ư", "u");
		map.put("ứ", "u");
		map.put("ừ", "u");
		map.put("ử", "u");
		map.put("ữ", "u");
		map.put("ự", "u");
		
		map.put("ý", "y");
		map.put("ỳ", "y");
		map.put("ỷ", "y");
		map.put("ỹ", "y");
		map.put("ỵ", "y");

		return map;
	}

	/**
	 * To compare two strings
	 * 
	 * @param s1
	 * @param s2
	 * @return 
	 */
	public static int compareToneStrings(String s1, String s2) {

		String s1Tmp = removeToneOfVietnameseString(s1);
		String s2Tmp = removeToneOfVietnameseString(s2);
		
		return s1Tmp.compareTo(s2Tmp);
	}
	
	/**
	 * To remove all tone (ex: á->a, ế->e,...) of the given string
	 * @param s
	 * @return
	 */
	public static String removeToneOfVietnameseString(String s){
		
		String tmp = s;
		
		Map<String, String> wovelMap = buildVietnameseWovelsMap();
		Set<String> keySet = wovelMap.keySet();
		for (String key : keySet) {
			tmp = tmp.replaceAll(key, wovelMap.get(key));
		}
		
		return tmp;
	}
}
